Repetitionsopgaver programmering

15. april 2000

Jeg har tilføjet nogle opgaver vedrørende databaser - det drejer sig primært om opgaver med SQL sætninger. Næste gang kommer der nogle opgaver vedrørende datastrukturer.

Basale kontrolstrukturer

1. Gentagelser

2. Selektioner

Grafiske brugergrænseflader

3. Højder

4. Amortisering af pantebrev

Klasser og objekter

5. Klassen ProduktSpecifikation

6. Klassen ProduktSpecifikationCollection

Databaser

7. SQL

Basale kontrolstrukturer

De følgende opgaver løses i Console mode. Hjælp hertil findes i noten Udvikling af programmer i Borland C++ Builder.

1. Gentagelser

Udarbejd et program, som kan bruges ved beregningen af gennemsnitshøjden for eleverne i klassen. De enkelte elevers højde indlæses via tastaturet. Når alle højder er indlæst, angives dette overfor programmet ved indtastning af tallet nul. Herefter udskrives gennemsnitshøjden på skærmen.

2. Selektioner

Udarbejd et program, som kan indlæse tre tal via tastaturet, og som derefter kan udskrive de tre tal på skærmen. Det mindste tal udskrives først og det største tal sidst.

Grafiske brugergrænseflader

Hjælp til de følgende opgaver kan findes i noten Visuel programmering med Borland C++ Builder SKNote06.ZIP

3. Højder

Udarbejd et program, som kan bruges ved beregningen af gennemsnitshøjden for eleverne i klassen. Der udarbejdes et skærmbillede efter nedenstående forbillede. De enkelte elevers højde indlæses enkeltvis i en EditBox (Højde). Hver indtastning afsluttes med tryk på knappen Registrér.

Herefter opdateres de øvrige felter: Antal (indtastede højder), Akkumuleret gennemsnit, højeste og laveste indtastede værdi.

 

 

4. Amortisering af pantebrev

Udarbejd et program som kan bruges til beregning af, hvordan et privat pantebrev amortiseres over et antal terminer. Inden beregningen påbegyndes skal nogle data indlæses og valideres. Restgæld er den aktuelle restgæld på lånet. Rentesats er rentesatsen pr. termin. Hvis renten f.eks. er 10% p.a. og der er aftalt 4 årlige terminer, er den rentesats, der skal indtastes 2,5%. Ydelse er det beløb, der afdrages ved hver termin. Det skal kontrolleres, at det indtastede beløb er større end renten i første termin.

De beregnede beløb for hver enkelt termin indsættes i en tabel (StringGrid). Beregningen fortsætter indtil der er beregnet 10 terminer frem i tiden, eller indtil restgælden bliver 0. Husk at reducere et eventuelt afdrag i sidste termin, så restgælden ikke bliver negativ.

 

 

Klasser og objekter

5. Klassen ProduktSpecifikation

Udarbejd klassen ProduktSpecifikation (inspireret af den gennemgående case hos Larman). Klassen skal have følgende attributter og metoder:

Attributter

description: Ansistring

price: float

upc: AnsiString

Metoder

Constructor samt set- og get-metoder til alle attributter

Udarbejd desuden et program, der kan bruges til aftestning af alle klassens metoder.

 

6. Klassen ProduktSpecifikationCollection

Udarbejd en klasse, der kan indeholde en collection af objekter af typen ProduktSpecifikation. Klassen skal have følgende attributter og metoder:

Attributter

collection: array med plads til 100 referencer til ProduktSpecifikation objekter.

count: integer // Antallet af aktuelle referencer

Metoder

Constructor

find(upc: AnsiString) : ProduktSpecifikation // afleverer null eller reference til fundne ProduktSpecifikation

load(filename: AnsiString) // Henter alle produkt specifikationer i en fil

save(filename: AnsiString) // Gemmer alle produkt specifikationer i en fil

Udarbejd desuden et program der kan bruges til aftestning af klassens

 

Databaser

Følgende relationelle database er defineret ved følgende tabeller. De understregede feltnavne er tabellernes primærnøgler.

Afdeling

Afdnr

Integer

Afdnavn

String[30]

Ansat

Medarbnr

Integer

Afdnr

Integer

Navn

String[30]

Adresse

String[30]

Postnr

Integer

Post

Postnr

Integer

Distrikt

String[30]

Projekt

Projektnr

Integer

Projektnavn

String[30]

Projektleder

Integer

ProjektMedarbejder

Projektnr

Integer

Medarbnr

Integer

Kompetence

Kompetencenr

Integer

Kompetencenavn

String[30]

Beskrivelse

String[1024]

MedarbejderKompetence

Medarbnr

Integer

Kompetencenr

Integer

Niveau

Integer

 

7. SQL

Udarbejd et diagram (f.eks. E/R diagram), der viser sammenhængen mellem de forskellige tabeller.

Udarbejd en SQL sætning, der kan oprette tabellen ansat.

Udarbejd en SQL sætning, som kan udskrive navn, adresse, postnr og distrikt på alle de medarbejdere, der er ansat i afdelingen med navnet "Økonomi".

Udarbejd en SQL sætning, som kan udskrive projektnavn, navn, adresse, postnr og distrikt for alle projektledere. Er en person leder for mere end ét projekt skal navnet kun udskrives én gang.

Udarbejd en SQL sætning, som kan udskrive navnene på alle de projekter, som ansatte fra afdelingen "Økonomi" medvirker i. Eventuelle fundne projektnavne skal kun medtages på listen én gang.

Udarbejd en SQL sætning, som kan udskrive antallet af medarbejder i afdelingen "Økonomi".

Udarbejd en SQL sætning, som kan udskrive navnene på alle de medarbejder, der medvirker i projektet med navnet "Økonomi system" og som har niveau 3 i kompetencen "C++ programmering".

Udarbejd en SQL sætning, som kan udskrive antallet af ansatte, der har et niveau højere end 2 i kompetencen "C++ programmering".